package dancereal;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

public class J01_HelloJDBC {
	
	/* JDBC 
	 * 데이터베이스에 접근하고 조작하는 것은
	 * 아주 중요한 주제중의 하나임
	 * 
	 * 데이터베이스에는 여러 브랜드가 있음
	 * Oracle,MySQL,MSSQL 등등
	 * 모든 데이터 베이스 서버는 독점적인 
	 * 방식을 통해 접근하고 관리하도록 허용됨
	 * 따라서, 각각의 데이터베이스에 접근하려면
	 * 각 브랜드가 제공하는 기술을 사용해야 함
	 * 
	 * 운좋게도 자바에서는 서로 다른 데이터베이스에
	 * 통일된 방식으로 접근하게 하는 JDBC를 제공함
	 * Java 7은 JDBC 4.1을 제공
	 * JDBC Core API: java.sql 패키지 
	 * JDBC Optional API : javaX.sql 패키지 
	 * 
	 * JDBC Driver
	 * 데이터 베이스 제조사가 제공하는 라이브러리
	 * 각 제조사는 자신만의 독점적인 기술을
	 * 이 라이브러리에 포함시켜 둠
	 * 이것을 JDBC API라는 통일된 코드를 이용해서
	 * 데이터베이스를 제어할 수 있음
	 * 
	 * 데이터베이스 접근 5단계
	 * 1. 데이터베이스에 접근하기 위해
	 * 	  'JDBC 드라이버' 불러오기
	 * 2. 데이터베이스 '연결' 얻기
	 * 3. 실행할 'SQL 문장'을 만들기 위해
	 * 	  Statement/PreparedStatement 객체 생성
	 * 4. SQL을 실행하고 데이터베이스로부터
	 * 	    넘어온 '결과를 처리'하기 위해
	 *	  ResultSet객체를 생성
	 * 5. 모든 처리가 끝나면 JDBC자원 해제 
	 * 
	 * Oracle JDBC 드라이버 등록
	 * ojdbc6.jar 를 라이브러리로 등록 - 패키지폴더 우클릭 Build path > add external archives
	 * 
	 * 
	 */
	
	public static void main(String[] args) {
	 // 오라클 데이터베이스 연결정보
	 final String DRV = "oracle.jdbc.driver.OracleDriver";
	 final String URL = "jdbc:oracle:thin:@112.216.253.125:1521:xe";
	 final String USR = "realdance";
	 final String PWD = "realdance";
	
	/* MySQL 데이터베이스 연결정보
	 * DRV = "com.mysql.jdbc.Driver";
     * URL = "jdbc:mysql://112.216.253.125:3306/zipcode";
     * USR = "zipcode";
     * PWD = "zipcode";
     * 
     * 데이터베이스 작업용 객체 정의*/
	 Connection conn = null; //연결
	 PreparedStatement pstmt = null; // 질의
	 ResultSet rs = null; // 결과
	 String SQL = "select * from employees";
     
     // 1. JDBC 드라이버 불러오기
	// JDBC 관련코드 작성시 예외처리를 위해
	// try - catch - finally 를 작성해둘것!
	
	 try {
		// 1.JDBC 드라이버 불러오기
		// Class : 클래스에 대한 객체를 동적으로 생성
		Class.forName( DRV );
		
		// 2.데이터베이스 연결
		conn = DriverManager.getConnection(
				URL, USR, PWD);
		
		// 3.실행할 SQL 질의 작성
		pstmt = conn.prepareStatement(SQL);
		// 4a.SQL 질의를 실행하고 결과를 받음
        rs = pstmt.executeQuery();
        
        // 4b.받은 결과 처리
        if(rs.next() ) { // 결과에 데이터가 존재하면
        	do{			 // 계속 반복해서 그것을 처리
        // rs.getXxx() : ResultSet 객체에서 데이터를 가져옴
        		System.out.print(rs.getString("employee_id"));
        		System.out.print("/");
        		System.out.println(rs.getString(4)); //4행 email
        	}while(rs.next());
        }else{			 // 결과에 데이터가 없으면
        	System.out.println("데이터가 음슴");
        }
        
	} catch (Exception e){	
		e.printStackTrace();
	} finally{
		// 5.JDBC 객체 해제
			if (rs != null)
				try {
					rs.close();
					rs = null;
				} catch (Exception e) {
				}
			if (pstmt != null)
				try {
					pstmt.close();
					pstmt = null;
				} catch (Exception e) {
				}
			if (conn != null)
				try {
					conn.close();
					conn = null;
				} catch (Exception e) {
				}
	
	} 
	}
}
